home *** CD-ROM | disk | FTP | other *** search
- Path: Belgium.EU.net!box!pahint
- From: pahint@eunet.be (Pieter Hintjens)
- Newsgroups: comp.lang.c
- Subject: FYI: Libero 2.10 is available
- Date: 14 Feb 1996 17:59:10 GMT
- Organization: EUnet Belgium, Leuven, Belgium
- Message-ID: <4ft7te$89q@news.Belgium.EU.net>
- NNTP-Posting-Host: box.eunet.be
- X-Newsreader: TIN [version 1.2 PL2]
-
-
- Libero 2.11 is available for free downloading!
-
- Point your browser to http://www.imatix.com for info.
-
- Libero is a Programmer's Tool and Code Generator. You define the
- high-level logic of a problem as a diagram: Libero generates the code
- to implement this logic. Your applications are easier to write, more
- robust, easier to understand. Libero uses a finite-state machine as
- underlying model.
-
- Libero is multi-language, multi-platform, multi-purpose. It uses
- a programmable code-generator engine and supports a wide range of
- languages:
-
- - C/C++
- - Perl
- - COBOL 74, COBOL 85
- - Visual Basic, MS Test Basic 1.0
- - UNIX C Shell, Korn Shell, Bourne Shell, Bash Shell
- - 80x86 assembler
- - Awk
-
- Libero runs on these platforms:
-
- - UNIX (tested on Linux, HP/UX, SunOS, Irix 5.2, AIX 3.2.5, Solaris)
- - MS-DOS
- - MS-Windows
- - Digital VAX/VMS and Open-VMS
- - any (in principle) any platform with an ANSI C compiler.
-
- Libero is free software following the GNU general public license. This
- is an extract from the documentation:
-
- ---------------------------------------------------------------------------
-
- Introduction
-
- "Laziness
-
- The quality that makes you go to great effort to reduce overall
- energy expenditure. It makes you write labour-saving programs
- that other people will find useful, and document what you wrote
- so you don't have to answer so many questions about it. Hence
- the first great virtue of a programmer."
-
- - Larry Wall, Programming Perl.
-
-
- How It All Started
-
- In 1982, as a student, I got into games programming as a way of making
- some money. I skipped the build-it-yourself-from-an-old-TV-screen-and-a-
- hex-keypad phase of personal computers, and jumped straight into the
- world of ready-to-go colour and sound. My first PC had 5K of RAM, and
- 25x22 colour video. It could beep in three-part harmony. My first
- published work was an article that explained how to tweak the video
- output to 30x33 (hi resolution!). Soon I was writing sprite painters,
- assembly libraries for sound and graphics, even languages to replace the
- built-in Basic. Anything to let me write my games faster and better.
- Before I knew what had hit me, I was hooked into the cycle of writing
- tools to improve the world I lived in.
-
- I haven't written a game for a long time, but I've continued writing
- tools. Libero is one of the best - it's simple, clean, portable, and has
- hit the mark so often that I feel it's unfair to keep it for myself.
-
- The ideas behind Libero evolved in Brussels, Belgium during the 1980's.
- I worked with Leif Svalgaard, on what we would now call a CASE tool - ETK
- - that let COBOL programmers produce clean, portable code instead of the
- mess we generally saw. One of the key techniques we used was a
- programming method based on finite state machines.
-
- Historically, the first real programs that used finite state machines
- were compilers. Finite state machines are also called Turing machines.
- In 1967, Peter Naur describes a new way of using Turing machines in a
- compiler, and shows how they simplify error checking. He goes on to say:
-
- "The above description has stressed the checking aspect of the Turing
- machine approach. However, an equally important aspect is the ease with
- which arbitrary actions may be specified. (...) By using this approach
- it is usually possible to avoid tests in individual actions to a
- surprisingly high degree. This in our experience is a very effective way
- of reducing the bulk and execution time of the translator algorithm."
-
- ETK provides an interactive editor that you use to describe the logic
- of the program as a finite state machine. This approach encourages you
- to think about the complete problem. You describe everything that can
- happen, and how the program should react. The end-result looks a little
- like a flow-chart, but has more arrows, and fewer different kinds of
- boxes.
-
- Now, in a conventional state machine, these boxes are given numbers,
- and the programmer build some tables that encode the arrows. To make
- such a table by hand - or, just as bad, encode the table directly in the
- logic of the program, using GOTOs - is a Bad Thing, since the result is
- near to impossible to maintain. The neat part of our solution was that
- we took the textual description (called a 'dialog'), and generated the
- mystical tables directly as COBOL code. This is a Good Thing, since the
- original dialog is easy to change, and suddenly becomes excellent (and
- always accurate) documentation.
-
- In 1992 I began working as a consultant, and found that I wanted to use
- these techniques in my work. I was writing in C, so I threw together a
- code generator that could output C code using the same dialog methodology
- I was used to. I called this tool 'Libero' after the guy who runs around
- the sidelines at the football/soccer pitch doing all the dirty work. My
- first serious job was a bunch of TCP/IP clients and servers. It was nice
- to come back to the place three years later and find that the guy
- maintaining my work had only found one bug, and was happy to go into the
- programs. He said that the dialogs made them easy to understand and
- modify.
-
- This kind of experience convinced me that there was real value in this
- tool. I've written lots of cute programs that are really useful for my
- own needs, but that just don't hack it in the real world. Libero is
- different.
-
- The first release of Libero generated C code using an external model,
- called a 'schema'. I had a couple of schemas; one for ANSI C code, and
- one for multithreaded DEC/VMS code.
-
- I released version 2.0 onto the Net after adding schemas for UNIX
- scripts. This release gave me a lot of feedback, and I rewrote the code-
- generator again to make it much more generic. The current version has a
- lot more language schemas and a lot fewer bugs, plus a front-end for MS-
- Windows.
-
- I hope to continue in both these directions. Libero has become a tool
- that lets you switch between languages at ease. The first step is to
- accept the state-machine as a valid method for program development. This
- takes a little effort, but I hope that the examples which follow will
- help convince you. The second step is to see that this method is
- language-independent. You can write a program in Awk, then recode it in
- C or Perl or assembler without changing its design.
-
-
- Some Examples
-
- I've not found a quick way to convey the true nature of state machine
- programming. In my experience, it invariably takes a few days of
- practice. After three or four days' exposure to the idea there is a
- near-audible 'click!' and something in the brain connects all the pieces
- together and you go 'Oh, it's like THAT!'. Maybe people cultured on
- event-driven programming will get it faster.
-
- In this section I'll describe some everyday situations as state
- machines, in the hope that this will help the process.
-
-
- Example 1: A Coke Machine
-
- The coke machine (once awake and gently humming1) sits against the
- wall, waiting. Like all coke machines, it's very good at waiting, due to
- Natural Selection. All the impatient proto-coke machines ran off
- screaming 'I can't take it anymore' and were crunched underfoot by
- brontosaurii back in the mists of prehistory. (I noted the part about
- the mists specifically to explain why the dinosaur trampled the proto-
- coke machine instead of extracting something cool to drink. The
- prevailing mists also explain the later demise of the dinosaurs due to
- extreme thirst. The surviving proto-coke machines moved patiently back
- against the proto-walls, out of danger.)
-
- ____________________
- 1 There is a theory about this, notably that coke machines have
- terrible memories, and can't remember the words. A second school of
- thought says that the coke machines are humming because they're thinking
- about all the terrible things they're going to do to humans with crow
- bars. A third school of thought reckons that the coke machines have
- already done something, and are humming because they thought it was
- really funny.
-
- A punter arrives with a handful of loose change. The coke-machine
- (covered by the modern and tasteful metal grid that serves both as a
- defensive covering and as an attraction for coke machines of the opposite
- sex) moves into 'attention' mode. When it hears the clink of tasty cash,
- rather that the ominous clunk of a heavy crow-bar, it relaxes into 'ready
- mode'. The machine is now ready to handle any eventuality, so long as it
- includes coinage.
-
- As the last coin falls and the punter presses the button labelled
- 'healthie waye sparkling spring water', the machine considers the
- possibilities. Should it play dead, and just take the punter's money?
- Or maybe it can substitute a can of 30% sucrose 'sweeto-sap'? Finally it
- rumbles once, then again for added effect, then excretes a can of water.
- It munches the coins, then settles back against the wall, quietly humming
- again.
-
- Just to prove that you can describe any sequence of events, however
- improbable, with a state machine, here goes. Act 1, scene 1 has our
- protagonist against the wall, trying to remember the words of the song.
- Our hero is normally OK; if something went terribly wrong with the
- rehearsals (e.g. a dinosaur got sucked through a five-dimensional space-
- time vortex stretched between the middle terrasic to five minutes into
- rehersals; the dinosaur a little off balance after the trip puts down its
- left foot, and 'crunch'...), it might be Dead, in which case we have to
- call the whole thing off. We'll call this scene 'Should Be Gently
- Humming'...
-
- Should-Be-Gently-Humming:
- (--) Ok -> Something-Happened
- + Wait-For-A-Punter
- (--) Dead ->
- + Stop-The-Programme
-
- The coke machine has been waiting, perhaps for days, for a punter to
- come along. When the footprints fade in from the distance (a coke
- machine's ears are always against the ground, which explains why you
- rarely find coke machines on wet or dirty surfaces), the machine hears
- either a cashy 'clink' or a more sinister 'clunk':
-
- Something-Happened:
- (--) Clink -> Before-Cooperating
- + Accept-Punter's-Cash
- + Wait-For-Punter's-Choice
- + Shall-We-Cooperate?
- (--) Clunk ->
- + Exit-Stage-Left-Running
- + Stop-The-Programme
-
- The advent of a 'Clunk' tells the machine to beat it, smartly. If a
- 'Clink' happened, the machine goes on to think about a game plan for the
- coming few minutes. It accepts whatever spare change the punter has to
- spare, then pounces, metaphorically:
-
- Before-Cooperating:
- (--) Ok -> Cooperate
- + Consider-Punter's-Choice
- (--) Nasty -> Let's-Be-Nasty
- + Consider-Punter's-Choice
- (--) Play-Dead -> Something-Happened
- + Switch-Off-All-Lights
- + Wait-Until-Punter-Has-Left
- + Switch-On-The-Lights
- + Wait-For-A-Punter
-
- If it's in a good mood, the machine ejects more or less the drink that
- the punter chose:
-
- Cooperate:
- (--) Coke -> Something-Happened
- + Eject-Can-Of-Coke
- + Wait-For-A-Punter
- (--) Spring-Water -> Something-Happened
- + Eject-Can-Of-Spring-Water
- + Wait-For-A-Punter
- (--) Juice -> Something-Happened
- + Eject-Can-Of-Juice
- + Wait-For-A-Punter
- (--) Sweeto-Sap -> Something-Happened
- + Eject-Can-Of-Sweeto-Sap
- + Wait-For-A-Punter
- (--) Empty ->
- + Switch-Off-All-Lights
- + Stop-The-Programme
-
- If the coke machine's pretty weak internal moral system failed, it
- supplies the opposite of whatever the punter wanted:
-
- Let's-Be-Nasty:
- (--) Coke -> Something-Happened
- + Eject-Can-Of-Juice
- + Wait-For-A-Punter
- (--) Spring-Water -> Something-Happened
- + Eject-Can-Of-Sweeto-Sap
- + Wait-For-A-Punter
- (--) Juice -> Something-Happened
- + Eject-Can-Of-Coke
- + Wait-For-A-Punter
- (--) Sweeto-Sap -> Something-Happened
- + Eject-Can-Of-Spring-Water
- + Wait-For-A-Punter
- (--) Empty ->
- + Switch-Off-All-Lights
- + Stop-The-Programme
-
- This diagram is a little complex for a first example. Remember
- however, that we are modelling a rich behaviour pattern that took several
- hundreds of millions of years to evolve. Real software is usually
- developed much faster, and should therefore be much simpler, only it
- isn't.
-
- --
- Pieter A. Hintjens
-